// 存储用户共有的信息
// 存放一些存取其中信息的异步操作

import { loginAPI } from "@/apis/user";
import { createSlice } from "@reduxjs/toolkit";
import { localRequest,request } from "@/utils";
import { setLocalUserStatus, getLocalUserStatus } from "@/utils";
import { message } from "antd";

// 初始化数据存储
const userStore = createSlice({
    name:'user',
    initialState:{
        user_status:getLocalUserStatus() || {},
        user_info:{}
    },
    reducers:{
        setUserStatus(state,action){
            // console.log(action.payload);
            state.user_status = action.payload;
            // console.log("state is",state.user_status);
            setLocalUserStatus(state.user_status);
        }
    }
})



// 结构出actionCreater
const { setUserStatus } = userStore.actions;

// 获取reducer函数
const userReducer = userStore.reducer;

// 异步登录，并将数据存入store中
const fetchLogin = function(loginForm){
    return async function(dispatch){
        // 1.发送异步请求
        const res = await loginAPI(loginForm);

        if(res.data.success){
            message.success(res.data.message);
            dispatch(setUserStatus({
                user_role:res.data.role,
                token:res.data.token
            }))
        } else {
            message.error(res.data.message);
        }

        return res.data;
        
        // 修改库中的数据必须使用dispatch，传入action对象（也就是修改函数的一次调用）
        // dispatch(setToken(res.data.token));
    }
}

// dispatch相当于一个函数执行环境

// 登录请求
const localLogin = function(){
    return async function(dispatch){
        const res = await localRequest.get('/usr/userStatus.json');
        message.success("登录成功");
        dispatch(setUserStatus(res.data));
        return res.data.user_role;
    }
}

export { 
    setUserStatus,
    localLogin,
    fetchLogin
}

export default userReducer;